package com.yang.design_patterns.singleton_design_pattern;

import java.util.concurrent.atomic.AtomicLong;

/**
 * @Description: 自增唯一ID生成器
 * @Author: 杨 强
 * @CreateTime: 2022-10-27 11:36
 */
public class AutoincrementIdGenerator {
    /**
     * AtomicLong是一个Java并发库中提供的一个原子变量类型,
     * 它将一些线程不安全需要加锁的复合操作封装为了线程安全的原子操作，
     * 比如下面会用到的incrementAndGet().
     */
    private AtomicLong id = new AtomicLong(0);

    /**
     * 唯一的实例
     */
    private static final AutoincrementIdGenerator ID_GENERATOR_INSTANCE = new AutoincrementIdGenerator();

    /**
     * 私有构造方法
     */
    private AutoincrementIdGenerator() {

    }

    /**
     * 获取单例对象
     * @return 类对象
     */
    public static AutoincrementIdGenerator getInstance(){
        return ID_GENERATOR_INSTANCE;
    }

    /**
     * 获取自增的唯一ID
     * @return 自增唯一ID
     */
    public long getId(){
        return id.incrementAndGet();
    }
}

class Test{
    public static void main(String[] args) {
        long id = AutoincrementIdGenerator.getInstance().getId();
        System.out.println(id);
    }
}
